//
//  TableView1ViewController.swift
//  iOS-RxSwift-Tutorials_Example
//
//  Created by mengru.tian on 2020/9/21.
//  Copyright © 2020 CocoaPods. All rights reserved.
//

import UIKit
import RxSwift

class TableView1ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    
    private let disposeBag = DisposeBag()
    
    private var source = [
        "文本输入框的用法",
        "开关按钮的用法",
        "进度条的用法",
        "文本标签的用法",
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()

        title = "28.UITableView的使用1：基本用法"
        view.backgroundColor = .white
        //创建一个重用的单元格
        self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        self.tableView.delegate = self
        self.tableView.dataSource = self
        
        addLongGes()
    }
    
    // UITableView 的基本用法
    func addLongGes() {
        
        //绑定对长按的响应
        let longPress = UILongPressGestureRecognizer(target:self,
                          action:#selector(tableviewCellLongPressed(_:)))
        longPress.minimumPressDuration = 1.0
        //将长按手势添加到需要实现长按操作的视图里
        self.tableView!.addGestureRecognizer(longPress)
    }
    
    //单元格长按事件响应
    @objc func tableviewCellLongPressed(_ gestureRecognizer:UILongPressGestureRecognizer)
    {
        if (gestureRecognizer.state == UIGestureRecognizerState.began)
        {
            print("UIGestureRecognizerStateBegan");
        }
        if (gestureRecognizer.state == UIGestureRecognizerState.changed)
        {
            print("UIGestureRecognizerStateChanged");
        }
         
        if (gestureRecognizer.state == UIGestureRecognizerState.ended)
        {
            print("UIGestureRecognizerStateEnded");
            //在正常状态和编辑状态之间切换
            if(self.tableView!.isEditing == false)
            {
                self.tableView!.setEditing(true, animated:true)
            }
            else
            {
                self.tableView!.setEditing(false, animated:true)
            }
        }
    }
        
//    // 单元格选中事件响应
//    func test2() {
//        //获取选中项的索引
//        tableView.rx.itemSelected.subscribe(onNext: { indexPath in
//            print("选中项的indexPath为：\(indexPath)")
//        }).disposed(by: disposeBag)
//
//        //获取选中项的内容
//        tableView.rx.modelSelected(String.self).subscribe(onNext: { item in
//            print("选中项的标题为：\(item)")
//        }).disposed(by: disposeBag)
//
//        // 同时获取选中项的索引及内容
//        /**Observable.zip(tableView.rx.itemSelected, tableView.rx.modelSelected(String.self))
//        .bind { [weak self] indexPath, item in
//            self?.showMessage("选中项的indexPath为：\(indexPath)")
//            self?.showMessage("选中项的标题为：\(item)")
//        }
//        .disposed(by: disposeBag)**/
//    }
//
//    // 分别获取取消项的索引及内容
//    func test3() {
//        //获取被取消选中项的索引
//        tableView.rx.itemDeselected.subscribe(onNext: { [weak self] indexPath in
//            print("被取消选中项的indexPath为：\(indexPath)")
//        }).disposed(by: disposeBag)
//
//        //获取被取消选中项的内容
//        tableView.rx.modelDeselected(String.self).subscribe(onNext: {[weak self] item in
//            print("被取消选中项的的标题为：\(item)")
//        }).disposed(by: disposeBag)
//
//        // 也可以同时获取
//        /**Observable.zip(tableView.rx.itemDeselected, tableView.rx.modelDeselected(String.self))
//        .bind { [weak self] indexPath, item in
//            self?.showMessage("被取消选中项的indexPath为：\(indexPath)")
//            self?.showMessage("被取消选中项的的标题为：\(item)")
//        }
//        .disposed(by: disposeBag)**/
//    }
//
//    // 单元格删除事件响应
//    func test4() {
//        //获取删除项的索引
//        tableView.rx.itemDeleted.subscribe(onNext: { [weak self] indexPath in
//            self?.showMessage("删除项的indexPath为：\(indexPath)")
//        }).disposed(by: disposeBag)
//
//        //获取删除项的内容
//        tableView.rx.modelDeleted(String.self).subscribe(onNext: {[weak self] item in
//            self?.showMessage("删除项的的标题为：\(item)")
//        }).disposed(by: disposeBag)
//    }
//
//    // 显示消息提示框
//    func showMessage(_ text: String) {
//        let alertController = UIAlertController(title: text, message: nil, preferredStyle: .alert)
//        let cancelAction = UIAlertAction(title: "确定", style: .cancel, handler: nil)
//        alertController.addAction(cancelAction)
//        self.present(alertController, animated: true, completion: nil)
//    }

}

extension TableView1ViewController: UITableViewDelegate {
    
    // 设置单元格的编辑的样式
    func tableView(_ tableView: UITableView,
                   editingStyleForRowAt indexPath: IndexPath)
        -> UITableViewCellEditingStyle {
        if(self.tableView!.isEditing == false)
        {
            return UITableViewCellEditingStyle.delete
        }
        else
        {
            return UITableViewCellEditingStyle.insert
        }
    }
    
    // 设置确认删除按钮的文字
    func tableView(_ tableView: UITableView,
                   titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
             
        let itemString = source[indexPath.row]
        return "确定删除\(itemString)？"
    }
}

extension TableView1ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return source.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
        cell.textLabel?.text = "\(indexPath.row)：\(source[indexPath.row])"
        return cell
    }
    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if(editingStyle == UITableViewCellEditingStyle.delete)
        {
            source.remove(at: indexPath.row)
            self.tableView!.reloadData()
        }
        else if(editingStyle == UITableViewCellEditingStyle.insert)
        {
            source.insert("插入一项新的",at: indexPath.row+1)
            self.tableView!.reloadData()
        }
    }
}
